import { defineConfig, devices } from '@playwright/test'

/**
 * 从文件读取环境变量。
 * https://github.com/motdotla/dotenv
 */
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });

/**
 * 参见 https://playwright.dev/docs/test-configuration
 */

// 标识是否运行 Electron 端到端测试（用于条件启动 webServer）
const isElectronTarget = process.env.PW_TARGET === 'electron'
export default defineConfig({
  testDir: './e2e',
  /* 在同一文件中的测试并行运行 */
  fullyParallel: true,
  /* 在 CI 上若源码中遗留 test.only 则使构建失败 */
  forbidOnly: !!process.env.CI,
  /* 仅在 CI 上重试 */
  retries: process.env.CI ? 2 : 0,
  /* 在 CI 上禁用并行（只用 1 个 worker） */
  workers: process.env.CI ? 1 : undefined,
  /* 通过环境变量选择 Electron 项目 */
  grepInvert: process.env.PW_TARGET === 'electron' ? /^(?!.*)/ : undefined,
  /* 使用的报告器。参见 https://playwright.dev/docs/test-reporters */
  reporter: process.env.PW_HTML === '1' ? 'html' : 'list',
  /* 默认不保留测试产物；设置 PW_ARTIFACTS=1 可在失败时保留 */
  preserveOutput: process.env.PW_ARTIFACTS ? 'failures-only' : 'never',
  /* 以下为所有项目的共享设置。参见 https://playwright.dev/docs/api/class-testoptions */
  use: {
    /* 基础地址，例如可用于 `await page.goto('/')` */
    baseURL: process.env.PW_TARGET === 'electron' ? undefined : 'http://localhost:4173',

    /* 测试追踪与媒体产物：默认关闭，设置 PW_ARTIFACTS=1 后在重试时开启追踪 */
    trace: process.env.PW_ARTIFACTS ? 'on-first-retry' : 'off',
    screenshot: 'off',
    video: 'off'
  },

  /* 为主流浏览器与 Electron 配置项目 */
  projects: [
    {
      name: 'chromium',
      testDir: './e2e',
      use: { ...devices['Desktop Chrome'] }
    },
    {
      name: 'firefox',
      testDir: './e2e',
      use: { ...devices['Desktop Firefox'] }
    },
    {
      name: 'webkit',
      testDir: './e2e',
      use: { ...devices['Desktop Safari'] }
    },
    {
      name: 'electron',
      testDir: './e2e-electron',
      use: {},
      workers: 1
    }
  ],

  /* 在开始测试前启动本地开发服务器 */
  webServer: isElectronTarget
    ? undefined
    : {
        command: 'cross-env E2E=true vite -m e2e',
        url: 'http://localhost:4173',
        reuseExistingServer: !process.env.CI
      }
})
